
 1000  *---------------------------------
 1010  MON.CH     .EQ $24
 1020  MON.CV     .EQ $25
 1030  MON.VTAB   .EQ $FC22
 1040  MON.CLREOP .EQ $FC42
 1050  MON.HOME   .EQ $FC58
 1060  MON.CLREOL .EQ $FC9C
 1070  MON.WAIT   .EQ $FCA8
 1080  MON.COUT   .EQ $FDED
 1090  MON.NORMAL .EQ $FE84
 1100  MON.INVERSE .EQ $FE80
 1110  *---------------------------------
 1120  MSG.PNTR   .EQ $18,19
 1130  MSG.SCANNER .EQ $1A
 1140  *---------------------------------
 1150  *      MESSAGE PRINTER
 1160  *
 1170  *   CALL:
 1180  *      (A) = MESSAGE #   (0-N)
 1190  *      JSR MESSAGE.PRINTER
 1200  *
 1210  *   ACTION:
 1220  *      1.  FINDS SPECIFIED MESSAGE
 1230  *      2.  PRINTS ON THE SCREEN
 1240  *      3.  INTERPRETS CHARACTERS AS FOLLOWS:
 1250  *          $00     END OF MESSAGE
 1260  *          $01-28  HTAB 1-40
 1270  *          $40-57  VTAB 1-24
 1280  *          $60     CLEAR SCREEN, HOME CURSOR
 1290  *          $61XXYY REPEAT CHARACTER YY, XX TIMES
 1300  *          $62     DELAY ABOUT TWO SECONDS
 1310  *          $63     NORMAL MODE
 1320  *          $64     INVERSE MODE
 1330  *          $65     CLEAR TO END OF LINE
 1340  *          $66     CLEAR TO END OF SCREEN
 1350  *          $80-FF  PRINT AS IS
 1360  *
 1370  *---------------------------------
 1380  MESSAGE.PRINTER
 1390         ASL          DOUBLE MSG NUMBER TO GET INDEX
 1400         TAY
 1410         LDA MESSAGE.ADDRESS.TABLE,Y
 1420         STA MSG.PNTR
 1430         LDA MESSAGE.ADDRESS.TABLE+1,Y
 1440         STA MSG.PNTR+1
 1450         LDA #0
 1460         STA MSG.SCANNER
 1470  .1     JSR GET.NEXT.CHAR.FROM.MESSAGE
 1480         BNE .3
 1490         RTS          $00:  EOM
 1500  .3     BPL .5       SPECIAL ACTION
 1510         JSR MON.COUT PRINT THE CHARACTER
 1520  .4     JMP .1
 1530  *---------------------------------
 1540  .5     CMP #$40     CHECK FOR VTAB
 1550         BCS .6       YES
 1560         CMP #$29     IN RANGE FOR HTAB?
 1570         BCS .4       NO, IGNORE
 1580         STA MON.CH
 1590         DEC MON.CH
 1600         BCC .4       ...ALWAYS
 1610  *---------------------------------
 1620  .6     CMP #$58     IN RANGE FOR VTAB?
 1630         BCS .7       NO
 1640         AND #$1F     MASK VALUE
 1650         STA MON.CV   YES
 1660         JSR MON.VTAB
 1670         JMP .4
 1680  *---------------------------------
 1690  .7     EOR #$60     CHECK FOR TOKENS
 1700         CMP #7       $60 THROUGH $66
 1710         BCS .4       NOT TOKEN, SO IGNORE
 1720         ASL          MAKE DUBLE INDEX
 1730         TAX
 1740         LDA /.4-1    PUT RETURN ON STACK
 1750         PHA          TO SIMULATE A JSR ADDR,X
 1760         LDA #.4-1
 1770         PHA
 1780         LDA MSGTKNTBL+1,X
 1790         PHA
 1800         LDA MSGTKNTBL,X
 1810         PHA
 1820         RTS
 1830  *---------------------------------
 1840  MSGTKNTBL
 1850         .DA MON.HOME-1
 1860         .DA MSG.REPEAT-1
 1870         .DA LONG.DELAY-1
 1880         .DA MON.NORMAL-1
 1890         .DA MON.INVERSE-1
 1900         .DA MON.CLREOL-1
 1910         .DA MON.CLREOP-1
 1920  *---------------------------------
 1930  MSG.REPEAT
 1940         JSR GET.NEXT.CHAR.FROM.MESSAGE
 1950         TAX          NUMBER OF MULTIPLES
 1960         JSR GET.NEXT.CHAR.FROM.MESSAGE
 1970  .1     JSR MON.COUT
 1980         DEX
 1990         BNE .1
 2000         RTS
 2010  *---------------------------------
 2020  LONG.DELAY
 2030         LDY #12
 2040  .1     JSR MON.WAIT DELAY 167309 CYCLES
 2050         DEY
 2060         BNE .1
 2070         RTS
 2080  *---------------------------------
 2090  GET.NEXT.CHAR.FROM.MESSAGE
 2100         LDY MSG.SCANNER
 2110         LDA (MSG.PNTR),Y
 2120         INC MSG.SCANNER
 2130         BNE .1
 2140         INC MSG.PNTR+1
 2150  .1     CMP #0
 2160         RTS
 2170  *---------------------------------
 2180  MESSAGE.ADDRESS.TABLE
 2190         .DA MSG0
 2200         .DA MSG1
 2210         .DA MSG2
 2220         .DA MSG3
 2230  *---------------------------------
 2240  MSG0   .HS 60       HOME SCREEN
 2250  * CELL 1 -- VOCABULARY CHECK
 2260         .HS 64       INVERSE MODE
 2270         .HS 6129AD   4A DASHES
 2280         .HS 28ADAD   2 DASHES
 2290         .HS 28ADAD
 2300         .HS 28ADAD   2 DASHES
 2310         .HS 28ADAD   2 DASHES
 2320         .HS 28ADAD   2 DASHES
 2330         .HS 28ADAD   2 DASHES
 2340         .HS 286129AD 41 DASHES
 2350         .HS 63       NORMAL MODE
 2360         .HS 4205     VTAB 3, HTAB 5
 2370         .AS -/DEMONSTRATION OF MESSAGE PRINTER/
 2380         .HS 440F     VTAB 5, HTAB 15
 2390         .AS -/S-C SOFTWARE/
 2400         .HS 450E     VTAB 6, HTAB 14
 2410         .AS -/P. O. BOX 5537/
 2420         .HS 460B     VTAB 7, HTAB 11
 2430         .AS -/RICHARDSON, TX 75080/
 2440         .HS 4A       VTAB 11
 2450         .HS 00
 2460  *---------------------------------
 2470  MSG1   .HS 490166   VTAB 10, HTAB 1, CLR EOP
 2480         .AS -/SELECT ONE:  /
 2490         .HS 00
 2500  *---------------------------------
 2510  MSG2   .HS 570165   VTAB 24, HTAB 1, CLR EOL
 2520         .HS 64       INVERSE MODE
 2530         .AS -/ <SPACE> FOR MENU, <RETURN> FOR MORE /
 2540         .HS 6300     NORMAL MODE, EOM
 2550  *---------------------------------
 2560  MSG3   .HS 87878D
 2570         .AS -/***SYNTAX ERROR/
 2580         .HS 8D00

